def SHARP_Img_Full(r, g, b):
    '''
    加载满色画面

    * 参数   
        * r:  红,跟位颜色深度有关 :如8位 0-255 
        * g:  绿,跟位颜色深度有关 :如8位 0-255
        * b:  蓝,跟位颜色深度有关 :如8位 0-255

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_Flicker():
    '''
    加载Flicker画面,127的紫与127的绿,每行一致

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_Flicker2():
    '''
    加载Flicker画面,127的白与黑,每行一致

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    
    '''

def SHARP_Img_Gray256_V():
    '''
    加载垂直灰阶画面

    * 参数   : 无
    
    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_Gray256_H():
    '''
    加载水平灰阶画面

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_RED256_H():
    '''
    加载水平红过度画面

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_GREEN256_H():
    '''
     加载水平绿过度画面

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_BLUE256_H():
    '''
    加载水平蓝过度画面

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_RED256_V():
    '''
    加载垂直红过度画面

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_GREEN256_V():
    '''
    加载垂直绿过度画面

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_BLUE256_V():
    '''
    加载垂直蓝过度画面

    * 参数   : 无

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * raise  :   无
    '''

def SHARP_Img_Gay2(dir, mode, rgb_mode, rank):
    '''
    灰阶画面,带阶数可调

    * 参数
        * dir : 0:x变化 1:Y变化  
        * mode :0:由浅到深 1:由深到浅
        * rgb_mode :启用什么颜色的灰度 0x7:都启用,就是黑到白的过渡   0x4:红色灰度 0x1:蓝色灰度 0x2:绿色灰度
        * rank :阶数

    * 返回   : 无

    * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 例子   : Img_Gay2(0,0,0x7,32);32灰阶画面

    * raise  :   无
    '''

def SHARP_Img_Gay3(dir, mode, rgb_mode, gay_min, gay_max):
    '''
    灰阶画面,起始色阶和终止色阶可设,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数  
        * dir: 0: X变化, 1:Y变化
        * mode: 0: 由浅到深, 1: 由深到浅
        * rgb_mode: 启用什么颜色的灰度, 0x07: 都启用,就是黑到白的过渡, 0x04:红色灰度, 0x01:蓝色灰度, 0x02:绿色灰度
        * gay_min: 最小色阶
        * gay_max: 最大色阶

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_CT():
    '''
    窗口画面,加载中间1/2长方形白画面,外边黑,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数  : 无

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_CT2(rgb1, rgb2):
    '''
    窗口画面,加载中间1/2长方形,外边填充同一颜色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数 
        * rgb1: 中间长方形的颜色 , 参数是24位, 如纯红色 rgb=0xff0000
        * rgb2: 外边的颜色  ,参数是24位, 如纯红色 rgb=0xff0000

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_Checker(H_Sum, V_Sum):
    '''
    棋盘格画面,第一个块为白色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数  
        * H_Sum: 水平色块的数目
        * V_Sum: 垂直色块的数目

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_Checker2(H_Sum, V_Sum):
    '''
    棋盘格画面,第一个块为黑色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数
        * H_Sum: 水平色块的数目
        * V_Sum: 垂直色块的数目

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_Checker3(H_Sum, V_Sum, rgb1, rgb2):
    '''
    棋盘格画面,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数 
        * H_Sum: 水平色块的数目
        * V_Sum: 垂直色块的数目
        * rgb1: 第一个格子的颜色 ,参数是24位, 如纯红色 rgb=0xff0000
        * rgb2: 第二个格子的颜色 ,参数是24位, 如纯红色 rgb=0xff0000

    * 返回  : 无

    * raise  :   无

    '''

def SHARP_Img_Box():
    '''
    边框画面,四边白色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数  : 无

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_Box2():
    '''
    边框画面,上下边白色,左边红色,右边蓝色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数  : 无

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_ColorBarH():
    '''
    水平彩条画面,分别是0xFFFFFF,0xFFFF00,0x00FFFF,0x00FF00,0xFF00FF,0xFF0000,0x0000FF,0x000000,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数  : 无

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_ColorBarV():
    '''
    垂直彩条画面,分别是0xFFFFFF,0xFFFF00,0x00FFFF,0x00FF00,0xFF00FF,0xFF0000,0x0000FF,0x000000,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数  : 无

    * 返回  : 无

    * raise  :   无
    '''

def SHARP_Img_ColorBar2(dir, len, RGB):
    '''
    彩条画面,带颜色自定义,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

    * 参数 
        * dir: 0: X方向, 1: Y方向
        * len: RGB传递的列表大小,不能超过8
        * RGB: 要传递的列表, 格式: RGB = [0xFFFFFF,0xFFFF00,0x00FFFF,0x00FF00,0xFF00FF,0xFF0000,0x0000FF,0x000000]

    * 返回  : 无
    * raise  :   无
    '''

def SHARP_Img_Block4(rgb1, rgb2, rgb3, rgb4):
    '''
    以4个颜色为1个block,整个屏幕以block填充,这个函数能解决交错Flicker画面,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换
                block的rgb分布 第一行 |rgb1,rgb2|
                            第二行 |rgb3,rgb4|
    * 参数  
        * rgb1: RGB颜色1 ,参数是24位, 如纯红色 rgb=0xff0000
        * rgb2: RGB颜色2 ,参数是24位, 如纯红色 rgb=0xff0000
        * rgb3: RGB颜色3 ,参数是24位, 如纯红色 rgb=0xff0000
        * rgb4: RGB颜色4 ,参数是24位, 如纯红色 rgb=0xff0000

    * 返回  : 无

    * raise  :   无
    '''


    '''
    自定义画面
    * 参数  
        * fun: 自定义函数列表
        * *arg: 自定义函数参数
 

    * 返回  : 无

    * raise  :   无

    * 示例  :

        # 函数原型
        void Img_Full(void (*fp)(int tem),unsigned char r, unsigned char g, unsigned char b)
        {
            unsigned int i, j;
            unsigned int pix;
            int Y_Size = 2560;
            int X_Size = 1600;	
            pix = (r<<16)|(g<<8)|b;
            
            for(j=0;j<Y_Size;j++)
            {	
                for(i=0;i<X_Size;i++)
                {
                    fp(pix);
                }
            }
        }

        #  转换后的数据
        Img_full_color = [0x2d, 0xe9, 0xf0, 0x47, 0x80, 0x46, 0x08, 0x04, 0x40, 0xea, 0x02, 0x20, 0x00, 0x25, 0x4f, 0xf4, 0x20, 0x67, 0x4f, 0xf4, 0xc8, 0x66, 0x40, 0xea, 0x03, 0x09, 0x00, 0x24, 0x03, 0xe0, 0x41, 0x46, 0x48, 0x46, 0x88, 0x47, 0x64, 0x1c, 0xb4, 0x42, 0xf9, 0xd3, 0x6d, 0x1c, 0xbd, 0x42, 0xf4, 0xd3, 0xbd, 0xe8, 0xf0, 0x87]

        SHARP_Img_custom(Img_full_color,SHARP_GPU_WrRGB,255,255,255)


    '''

class image(object):
    '''√
    画面模块类

    * 参数  
        *

    * 返回 :  
        *

    * 注意 : 
        不用实例化，可以直接使用
        
    * raise  :   无            
    '''

   #'''
   #::
    frame_num = 0
    frame_hold_cnt = []
    Qspi_mode = None
    
   #'''

    def  Img_SDCard_BMP(cls,file_name:str,time:int,frame = None):
        '''
        加载SD卡 BMP格式图片, 必须是24位真彩色图片

        * 参数
            * file_name : 图像文件名（可包含文件夹目录名），支持长英文名
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回 : 无
        '''

    def  Img_SDCard_BIN(cls,file_name:str,time:int,frame = None):
        '''
        加载SD卡 二进制(BIN)图像

        * 参数  
            * 参数
            * file_name : 图像文件名（可包含文件夹目录名），支持长英文名
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        '''

    def  Img_Full(cls,r:int, g:int, b:int,time:int,frame = None):
        '''
        加载满色画面

        * 参数   
            * r: 
            * g:
            * b:对应的颜色
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_Flicker(cls,time:int,frame = None):
        '''
        加载Flicker画面,127的紫与127的绿,每行一致

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_Flicker2(cls,time:int,frame = None):
        '''
        加载Flicker画面,127的白与黑,每行一致

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        '''

    def  Img_Gray256_V(cls,time:int,frame = None):
        '''
        加载垂直灰阶画面

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号
        
        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_Gray256_H(cls,time:int,frame = None):
        '''
        加载水平灰阶画面

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_RED256_H(cls,time:int,frame = None):
        '''
        加载水平红过度画面

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_GREEN256_H(cls,time:int,frame = None):
        '''
        加载水平绿过度画面

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_BLUE256_H(cls,time:int,frame = None):
        '''
        加载水平蓝过度画面

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_RED256_V(cls,time:int,frame = None):
        '''
        加载垂直红过度画面

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号


        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_GREEN256_V(cls,time:int,frame = None):
        '''
        加载垂直绿过度画面

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_BLUE256_V(cls,time:int,frame = None):
        '''
        加载垂直蓝过度画面

        * 参数   
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * raise  :   无
        '''

    def  Img_Gay2(cls,dir:int, mode:int, rgb_mode:int, rank:int,time:int,frame = None):
        '''
        灰阶画面,带阶数可调

        * 参数
            * dir : 0:x变化 1:Y变化  
            * mode :0:由浅到深 1:由深到浅
            * rgb_mode :启用什么颜色的灰度 0x7:都启用,就是黑到白的过渡   0x4:红色灰度 0x1:蓝色灰度 0x2:绿色灰度
            * rank :阶数
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回   : 无

        * 注意   : 该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 例子   : Img_Gay2(0,0,0x7,32);32灰阶画面

        * raise  :   无
        '''

    def  Img_Gay3(cls,dir:int, mode:int, rgb_mode:int, gay_min:int, gay_max:int,time:int,frame = None):
        '''
        灰阶画面,起始色阶和终止色阶可设,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数  
            * dir: 0: X变化, 1:Y变化
            * mode: 0: 由浅到深, 1: 由深到浅
            * rgb_mode: 启用什么颜色的灰度, 0x07: 都启用,就是黑到白的过渡, 0x04:红色灰度, 0x01:蓝色灰度, 0x02:绿色灰度
            * gay_min: 最小色阶
            * gay_max: 最大色阶
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号
        * 返回  : 无

        * raise  :   无
        '''

    def  Img_CT(cls,time:int,frame = None):
        '''
        窗口画面,加载中间1/2长方形白画面,外边黑,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * time      : 锁秒时间
        * frame     : 预加载的画面序列号

        * 返回  : 无

        * raise  :   无
        '''

    def  Img_CT2(cls,rgb1:int, rgb2:int,time:int,frame = None):
        '''
        窗口画面,加载中间1/2长方形,外边填充同一颜色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数 
            * rgb1: 中间长方形的颜色
            * rgb2: 外边的颜色
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回  : 无

        * raise  :   无
        '''

    def  Img_Checker(cls,H_Sum:int, V_Sum:int,time:int,frame = None):
        '''
        棋盘格画面,第一个块为白色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数  
            * H_Sum: 水平色块的数目
            * V_Sum: 垂直色块的数目
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回  : 无

        * raise  :   无
        '''

    def  Img_Checker2(cls,H_Sum:int, V_Sum:int,time:int,frame = None):
        '''
        棋盘格画面,第一个块为黑色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数
            * H_Sum: 水平色块的数目
            * V_Sum: 垂直色块的数目
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号
        * 返回  : 无

        * raise  :   无
        '''

    def  Img_Checker3(cls,H_Sum:int, V_Sum:int, rgb1:int, rgb2:int,time:int,frame = None):
        '''
        棋盘格画面,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数 
            * H_Sum: 水平色块的数目
            * V_Sum: 垂直色块的数目
            * rgb1: 第一个格子的颜色
            * rgb2: 第二个格子的颜色
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回  : 无

        * raise  :   无

        '''

    def  Img_Box(cls,time:int,frame = None):
        '''
        边框画面,四边白色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回  : 无

        * raise  :   无
        '''

    def  Img_Box2(cls,time:int,frame = None):
        '''
        边框画面,上下边白色,左边红色,右边蓝色,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回  : 无

        * raise  :   无
        '''

    def  Img_ColorBarH(cls,time:int,frame = None):
        '''
        水平彩条画面,分别是0xFFFFFF,0xFFFF00,0x00FFFF,0x00FF00,0xFF00FF,0xFF0000,0x0000FF,0x000000,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数  : 
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回  : 无

        * raise  :   无
        '''

    def  Img_ColorBarV(cls,time:int,frame = None):
        '''
        垂直彩条画面,分别是0xFFFFFF,0xFFFF00,0x00FFFF,0x00FF00,0xFF00FF,0xFF0000,0x0000FF,0x000000,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数  : 
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回  : 无

        * raise  :   无
        '''

    def  Img_ColorBar2(cls,dir:int, len:int, RGB:int,time:int,frame = None):
        '''
        彩条画面,带颜色自定义,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换

        * 参数 
            * dir: 0: X方向, 1: Y方向
            * len: RGB传递的列表大小,不能超过8
            * RGB: 要传递的列表, 格式: RGB = [0xFFFFFF,0xFFFF00,0x00FFFF,0x00FF00,0xFF00FF,0xFF0000,0x0000FF,0x000000]
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号

        * 返回  : 无
        * raise  :   无
    '''

    def  Img_Block4(cls,rgb1:int, rgb2:int, rgb3:int, rgb4:int,time:int,frame = None):
        '''
        以4个颜色为1个block,整个屏幕以block填充,这个函数能解决交错Flicker画面,该函数不会立马显示,而是加入切换组里由SwitchFrame函数切换
                    block的rgb分布 第一行 |rgb1,rgb2|
                                第二行 |rgb3,rgb4|
        * 参数  
            * rgb1: RGB颜色1
            * rgb2: RGB颜色2
            * rgb3: RGB颜色3
            * rgb4: RGB颜色4
            * time      : 锁秒时间
            * frame     : 预加载的画面序列号
            
        * 返回  : 无

        * raise  :   无
        '''

    def  Img_custom(cls,fun,*arg,time:int,frame = None):
        '''
        自定义画面
        * 参数  
            * fun: 自定义函数列表
            * *arg: 自定义函数参数
    

        * 返回  : 无

        * raise  :   无

        * 示例  :

            # 函数原型
            void Img_Full(void (*fp)(int tem),unsigned char r, unsigned char g, unsigned char b)
            {
                unsigned int i, j;
                unsigned int pix;
                int Y_Size = 2560;
                int X_Size = 1600;	
                pix = (r<<16)|(g<<8)|b;
                
                for(j=0;j<Y_Size;j++)
                {	
                    for(i=0;i<X_Size;i++)
                    {
                        fp(pix);
                    }
                }
            }

            #  转换后的数据
            Img_full_color = [0x2d, 0xe9, 0xf0, 0x47, 0x80, 0x46, 0x08, 0x04, 0x40, 0xea, 0x02, 0x20, 0x00, 0x25, 0x4f, 0xf4, 0x20, 0x67, 0x4f, 0xf4, 0xc8, 0x66, 0x40, 0xea, 0x03, 0x09, 0x00, 0x24, 0x03, 0xe0, 0x41, 0x46, 0x48, 0x46, 0x88, 0x47, 0x64, 0x1c, 0xb4, 0x42, 0xf9, 0xd3, 0x6d, 0x1c, 0xbd, 0x42, 0xf4, 0xd3, 0xbd, 0xe8, 0xf0, 0x87]

            SHARP_Img_custom(Img_full_color,SHARP_GPU_WrRGB,255,255,255)


        '''

